The present invention relates generally to object-based high level programming environments, and more particularly, to techniques for representing string objects in object-based computing environments.
Recently, the Java programming environment has become quite popular. The Java programming language is a language that is designed to be portable enough to be executed on a wide range of computers ranging from small devices (e.g., pagers, cell phones and smart cards) up to supercomputers. Computer programs written in the Java programming language (and other languages) may be compiled into Java Bytecode instructions that are suitable for execution by a Java virtual machine implementation.
The Java virtual machine is commonly implemented in software by means of an interpreter for the Java virtual machine instruction set but, in general, may be software, hardware, or both. A particular Java virtual machine implementation and corresponding support libraries together constitute a Java runtime environment.
Computer programs in the Java programming language are arranged in one or more classes or interfaces (referred to herein jointly as classes or class files). Such programs are generally platform, i.e., hardware and operating system, independent. As such, these computer programs may be executed without modification on any computer that is able to run an implementation of the Java runtime environment.
Object-oriented classes written in the Java programming language are compiled to a particular binary format called the xe2x80x9cclass file format.xe2x80x9d The class file includes various components associated with a single class. These components can be, for example, methods and/or interfaces associated with the class. In addition, the class file format can include a significant amount of ancillary information that is associated with the class. The class file format (as well as the general operation of the Java virtual machine) is described in some detail in The Java Virtual Machine Specification, Second Edition, by Tim Lindholm and Frank Yellin, which is hereby incorporated herein by reference.
As an object-oriented programming language, Java utilizes the programming concept known as an object. In the Java programming environment, Java objects are created (instantiated) from Java classes. One common Java object is the Java string object which can represent a string of one or more characters. Conventionally, representation of each character in the string requires two bytes of data to be used. Thus, Java string objects are represented in arrays of two-byte characters (i.e., a series of entries where each entry contains a two-byte value representing a character).
As will be appreciated, the conventional representation of Java objects is inefficient since there is not always a need to represent strings in arrays of two-byte characters. In fact, the conventional approach can be grossly inefficient since, in most cases, there may not be a need to represent strings in arrays of two-byte characters. Thus, the conventional representation of Java string objects can seriously hinder the performance of a virtual machine, especially those with relatively limited resources (e.g., embedded systems with relatively smaller memory and computing power).
In view of the foregoing, alternative representation of Java string objects are useful.
Broadly speaking, the present invention relates to improved techniques for representing string objects in an object-oriented environment. The techniques are especially useful for representation of Java objects and can thereby improve the performance of virtual machine, especially those with relatively limited resources (e.g., embedded systems with relatively smaller memory and computing power).
In accordance with one aspect of the invention, techniques for instantiating Java string objects are disclosed. The techniques can be implemented to create Java string objects as arrays of one-byte characters when it is appropriate. These techniques can be utilized by an enhanced constructor that creates Java string objects in an efficient manner. The constructor can be provided in a Java library that is available to application programs (or programmers). Another aspect of the invention provides for enhanced Java methods that can perform operations on Java string objects represented as arrays of one-byte characters. The enhanced Java methods can also be provided in the Java library.
The invention can be implemented in numerous ways, including as a method, an apparatus, a computer readable medium, and a database system. Several embodiments of the invention are discussed below. a method of instantiation of a Java string object, said method comprising:
As a method for receiving one or more characters, one embodiment of the invention includes the acts of: determining whether an array of one-byte characters or an array of two-byte characters should be allocated to represent said Java string object; allocating an array of one-byte characters to represent said Java string object when it is determined that said Java string object should be allocated as an array of one-byte characters; and allocating an array of two-byte characters to represent said Java string object when it is determined that said Java string object should be allocated as an array of two-byte characters.
As a method for performing one or more operations on a Java string object, one embodiment of the invention includes the acts of receiving a request to perform an operation on a Java string object; determining whether said Java string object has been allocated as an array of one-byte characters or as an array of two-byte characters; invoking a method suitable for performing said operation on Java string objects that are allocated as arrays of one-byte characters when said determining determines that the said Java string object has been allocated as a array of one-byte characters.
As a Java computing environment, one embodiment of the invention includes: a Java string object suitable for representing a Java string of one or more characters, wherein said Java string is represented in an array of one byte characters in a memory portion of said Java computing environment.
As a computer readable media including computer program code for a Java library, one embodiment of the invention includes computer program code for at least one Java constructor suitable for instantiating a Java string object. The Java constructor can operate to allocate a Java string object as an array of one-byte characters.
These and other aspects and advantages of the present invention will become more apparent when the detailed description below is read in conjunction with the accompanying drawings.